package ch04.demo;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisAPI {
    private static JedisPool jedisPool;
    static {
        JedisPoolConfig config=new JedisPoolConfig();
        config.setMaxTotal(50);
        config.setMaxIdle(10);
        config.setMaxIdle(7);
        config.setMaxWaitMillis(1000);
        config.setTestOnBorrow(true);

        jedisPool=new JedisPool(config, "127.0.0.1", 6379, 1000, null, 0);
    }
    public void destroy(){
        if(!(jedisPool ==null || jedisPool.isClosed()))
            jedisPool.close();
    }
    public boolean set(String key,String value){
        Jedis jedis=null;
        try{
            jedis=jedisPool.getResource();
            jedis.set(key,value);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }finally {
            if(jedis!=null)
                jedis.close();
        }
    }
    public boolean set(String key,int seconds,String value){
        Jedis jedis=null;
        try{
            jedis=jedisPool.getResource();
            jedis.setex(key,seconds,value);
            return true;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(jedis !=null){
                jedis.close();
            }
            return false;
        }
    }
    public boolean exist(String key){
        Jedis jedis=null;
        try{
            jedis=jedisPool.getResource();
            return jedis.exists(key);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(jedis!=null){
                jedis.close();
            }
            return false;
        }
    }
    public String get(String key){
        String value=null;
        Jedis jedis=null;
        try{
            jedis=jedisPool.getResource();
            value=jedis.get(key);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(jedis !=null){
                jedis.close();
            }
            return value;
        }
    }
    public Long ttl(String key){
        Jedis jedis=null;
        try{
            jedis=jedisPool.getResource();
            return jedis.ttl(key);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(jedis!=null){
                jedis.close();
            }
            return (long)-2;
        }
    }
    public void delete(String key){
        Jedis jedis=null;
        try{
            jedis=jedisPool.getResource();
            jedis.del(key);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(jedis!=null)
                jedis.close();
        }
    }
}
